package com.sunyy.codegenerator.service;

import java.io.File;
import java.io.InputStream;
import java.nio.file.Path;

/**
 * 对象存储接口定义
 *
 * @author sunyy
 * @since 2025/7/19
 */
public interface CosService {
    /**
     * 创建桶
     *
     * @param bucketName 桶的名字
     */
    void createBucket(String bucketName);

    /**
     * 上传文件
     *
     * @param bucketName 桶的名字
     * @param folder     文件存储路径（最后一级应为文件名）
     * @param fileBytes  文件
     */
    void uploadFile(String bucketName, String folder, byte[] fileBytes);

    /**
     * 上传文件
     *
     * @param bucketName 桶的名字
     * @param folder     文件存储路径（最后一级应为文件名）
     * @param is         文件
     */
    void uploadFile(String bucketName, String folder, InputStream is);

    /**
     * 上传文件
     *
     * @param bucketName 桶的名字
     * @param folder     文件存储路径（最后一级应为文件名）
     * @param file       文件
     */
    void uploadFile(String bucketName, String folder, File file);

    /**
     * 上传文件
     *
     * @param bucketName 桶的名字
     * @param folder     文件存储路径（最后一级应为文件名）
     * @param filePath   文件
     */
    void uploadFile(String bucketName, String folder, Path filePath);

    /**
     * 上传文件
     *
     * @param bucketName 桶的名字
     * @param folder     文件存储路径（最后一级应为文件名）
     * @param filePath   文件
     */
    void uploadFile(String bucketName, String folder, String filePath);

    /**
     * 获取文件
     *
     * @param bucketName 桶的名字
     * @param folder     文件存储路径（最后一级应为文件名）
     * @return
     */
    byte[] getFileBytes(String bucketName, String folder);

    /**
     * 获取文件
     *
     * @param bucketName 桶的名字
     * @param folder     文件存储路径（最后一级应为文件名）
     * @return
     */
    InputStream getFileInputStream(String bucketName, String folder);

    /**
     * 删除文件
     *
     * @param bucketName 桶的名字
     * @param folder     文件存储路径（最后一级应为文件名）
     */
    void deleteFile(String bucketName, String folder);

}
